6870d3981d7861b8ecd2003bb204923a7e876bfe,drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentIncrementalChangeSetTest.java,KnowledgeAgentIncrementalChangeSetTest,testUpdatePackageUrlOverwriteIncremental,#,758
Before Change
public void testUpdatePackageUrlOverwriteIncremental() throws Exception {
String header = "";
header += "package org.drools.test\n";
header += "global java.util.List list\n\n";
String rule1 = header + this.createCommonRule("rule1");
String rule1v2 = header + this.createCommonRule("rule1","2");
String rule2 = header + this.createCommonRule("rule2");
String rule3 = header + this.createCommonRule("rule3");
// Add Rule1 and Rule2 in the first package
File pkgF1 = fileManager.newFile("pkg1.pkg");
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newByteArrayResource(rule1.getBytes()),
ResourceType.DRL);
kbuilder.add(ResourceFactory.newByteArrayResource(rule2.getBytes()),
ResourceType.DRL);
if (kbuilder.hasErrors()) {
fail(kbuilder.getErrors().toString());
}
KnowledgePackage pkg1 = (KnowledgePackage) kbuilder.getKnowledgePackages().iterator().next();
writePackage(pkg1, pkgF1);
// Add Rule3 in the second package
File pkgF2 = fileManager.newFile("pkg2.pkg");
kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newByteArrayResource(rule3.getBytes()),
ResourceType.DRL);
if (kbuilder.hasErrors()) {
fail(kbuilder.getErrors().toString());
}
KnowledgePackage pkg2 = (KnowledgePackage) kbuilder.getKnowledgePackages().iterator().next();
writePackage(pkg2, pkgF2);
String xml = "";
xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
xml += " xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
xml += " xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >";
xml += " <add> ";
xml += " <resource source='http://localhost:"+this.getPort()+"/pkg1.pkg' type='PKG' />";
xml += " <resource source='http://localhost:"+this.getPort()+"/pkg2.pkg' type='PKG' />";
xml += " </add> ";
xml += "</change-set>";
File fxml = fileManager.newFile("changeset.xml");
Writer output = new BufferedWriter(new FileWriter(fxml));
output.write(xml);
output.close();
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
KnowledgeAgent kagent = this.createKAgent(kbase);
kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
List<String> list = new ArrayList<String>();
ksession.setGlobal("list", list);
ksession.fireAllRules();
ksession.dispose();
assertEquals(3, list.size());
assertTrue(list.contains("rule1"));
assertTrue(list.contains("rule2"));
assertTrue(list.contains("rule3"));
list.clear();
// have to sleep here as linux lastModified does not do milliseconds
// http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=019789
System.gc();
Thread.sleep(2000);
kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newByteArrayResource(rule1v2.getBytes()),
ResourceType.DRL);
if (kbuilder.hasErrors()) {
fail(kbuilder.getErrors().toString());
After Change
// Add Rule1 and Rule2 in the first package
File pkgF1 = fileManager.newFile( "pkg1.pkg" );
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newByteArrayResource( createLhsRule( "rule1",
"String()\n" ).getBytes() ),
ResourceType.DRL );
kbuilder.add( ResourceFactory.newByteArrayResource( createLhsRule( "rule2",
"String()\n" ).getBytes() ),
ResourceType.DRL );
if ( kbuilder.hasErrors() ) {
fail( kbuilder.getErrors().toString() );